package com.ruoyi.purchase.service;

import com.ruoyi.product.domain.Product;
import com.ruoyi.product.domain.ProductModel;
import com.ruoyi.purchase.domain.PurchaseModel;
import com.ruoyi.purchase.domain.PurchaseOrder;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface PurchaseOrderService {

    public  int auditSale(PurchaseOrder purchaseOrder);
    /**
     * 查询采购订单
     *
     * @param purchaseOrder 查询条件
     * @return 结果
     */
    List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);

    /**
     * 添加采购订单
     *
     * @param purchaseOrder 采购订单信息
     * @return 结果
     */
    int insertPurchaseOrder(PurchaseOrder purchaseOrder);

    /**
     * 删除采购订单
     *
     * @param purchaseId 需要删除的主键
     * @return 结果
     */
    int deletePurchaseOrderById(Long purchaseId);

    /**
     * 查询采购订单基础信息
     *
     * @param purchaseId 采购订单主键
     * @return 结果
     */
    PurchaseOrder selectPurchaseOrderById(Long purchaseId);

    /**
     * 查询采购订单规格型号信息
     *
     * @param purchaseId 采购订单主键
     * @return 结果
     */
    List<PurchaseModel> selectPurchaseModelById(Long purchaseId);

    /**
     * 修改采购订单规格型号信息
     *
     * @param purchaseOrder 采购订单信息
     * @return 结果
     */
    int updatePurchaseOrder(PurchaseOrder purchaseOrder);

    /**
     * 查询供应商下的所有产品
     *
     * @param deptId 公司主键
     * @return 结果
     */
    List<Product> selectProduct(Long deptId);

    /**
     * 查询供应商下的所有产品  模糊查询
     *
     * @return
     */
    List<Product> selectProducts(Map map);

    /**
     * 查询供应商下的所有产品  弹窗页面
     *
     * @return
     */
    List<Product> selectProductList(Product product);

    /**
     * 查询产品下所有的规格型号
     *
     * @param productId 公司主键
     * @return 结果
     */
    List<ProductModel> selectProductModel(Long productId);

    /**
     * 生成订单编号
     *
     * @param date 日期
     * @param i    类型
     * @return 结果
     */
    String orderNum(Date date, int i);



    /**
     * 查询未审核采购订单
     *
     * @param purchaseOrder 查询条件
     * @return 结果
     */
    List<PurchaseOrder> selectPurchaseSupplier(PurchaseOrder purchaseOrder);

    /**
     * 复制采购订单信息
     *
     * @param purchaseId 主键
     * @return 结果
     */
    int copyPurchaseOrderById(Long purchaseId);

    /**
     * 查询采购订单信息
     *
     * @param hashMap 查询条件
     * @return 结果
     */
    PurchaseOrder selectPurchaseOrderByMap(HashMap<String, Object> hashMap);

    /**
     * 利用分页查询产品型号规格信息
     *
     * @param product 查询条件
     * @return 结果
     */
//    TableDataInfo selectProductLists(Product product);
    List<ProductModel> selectProductLists(Product product);

    /**
     * 根据 ModelCode查询 最新订单的价格
     */
    List<BigDecimal> selectSaleorderNewPrice(HashMap hashMap);

    /**
     * 修改采购订单子表数据
     *
     * @param purchaseModel 需要修改的数据
     * @return 结果
     */
    int updatePurchaseModel(PurchaseModel purchaseModel);

    // 获取上一条记录
    Long querypreviousId(Long purchaseId);
    // 获取下一条记录
    Long queryNextId(Long purchaseId);

    /**
     * 获取待审核订单
     * @return
     */
    List<Map<String, Object>> pendingReview(Long deptId);
}
